Python 集合
本来我们来系统的学习什么是集合、创建集合、集合新增、集合修改、集合查询、集合删除、集合运算(交集、并集、差集)、集合的常用方法,帮助大家系统学习Python集合的全部知识。
什么是集合
本节我们来介绍一下Python内置数据类型的最后一个,也就是集合,集合它的英文单词是set,翻译 为中文称之为集合,那么什么是集合呢?集合在Python中也是一个无序的数据集集合,这就与我们前面介绍的字典非常相似了,所以本节我们就可以对照字典来学习集合 看一下字典和集合它们之间的相同和不同。
- 字典它使用来表示,在大括号中的元素使用键值对儿,来进行表示。集合它也使用大括号,在集合中它只有值,没有键。
- 字典它是无序的,集合也是无序的。
- 字典它属于可变类型,可以对它进行增删改查。集合也是可变类型,它比较特殊,我们虽然可以对集合进行修改,但我们却不能对集合中不可变类型的元素进行修改。
- 字典中它的key值是不能重复的,如果有重复,后面的值会覆盖掉前面的值。在集合中value是不能重复的,如果有多个,那么只保留一个。
创建集合
本节我们来学习创建集合。在Python中,可以使用大括号 {}
或者 set()
函数来创建集合。如果要创建一个空集合,只能使用set()
函数,因为 {}
创建的是空字典。
- 使用
{}
直接创建集合
set_val = {1,2,3,4,5}
print(type(set_val))
输出结果:
<class 'set'>
- 使用set创建空集合
empty_set = set()
print(type(empty_set))
val = {}
print(type(val))
输出结果:
<class 'set'>
<class 'dict'>
这里需要注意的是,我们创建一个空的集合的时候不能使用单独的大括号来创建,因为单独的大符号,它表示一个字典。
- 使用 set() 函数把它类型的数据转化为集合
set_val1 = set([1, 2, 3, 4])
print(set_val1)
string_val2 = 'hello world'
set_value2 = set(string_val2)
print(set_value2)
输出结果:
{1, 2, 3, 4}
{'h', 'e', 'o', 'r', 'd', 'l', ' ', 'w'}
在这个结果中,将字符串中的每一个字符作为一个元素,而且它是无序的。对于我们之前的hello,world是完全不同的,此外呢,你还会发现这里只有一个l,而我们的hello world中有三个l,这是因为集合它是不能够重复的,当有多个元素的时候,它只会保留一个。这也体现出集合的一个特点它就可以去重,当你要去重的时候,你就可以把它转化为集合,集合自动就完成了去 重的功能。
- 直接创建集合支持不可变数据类型元素
集合可以包含多种不同的数据类型,例如数字、字符串、元组,不能包含列表和字典。
new_set = {'hello',123,123.456,(1,2,3)}
print(new_set)
输出结果:
{'hello', 123, 123.456, (1, 2, 3)}
我们尝试一下在集合中添加列表和字典
new_set = {'hello',123,123.456,(1,2,3),[1,2,3]}
new_set1 = {'hello',123,123.456,(1,2,3), {'name':'andy'}}
print(new_set)
print(new_set1)
输出结果:
TypeError: unhashable type: 'list'
TypeError: unhashable type: 'dict'
所以说这个集合中你只能添加一些不可变类型,可变类型的元素是不能添加的。
下面我们来总结一下集合的特点:
- 集合是无序的
- 集合中的元素是唯一的,当有多个重复元素的时候,集合中只会保留一个元素。
- 集合自身可以被修改,但是集合中的不可变数据是不能被修改的
集合新增
本节我们来学习Python 集合的新增操作,使用add() 方法像集合中添加新的元素。add() 方法用于向集合中添加一个元素,如果元素已存在,则不进行任何操作。
语法:
set.add(element)
参数:
- element:要添加的元素。
实例
实例1:使用add方法向集合中添加元素
set_val = {'hello',123,(1,2,3)}
set_val.add('andy')
print(set_val)
输出结果:
{123, 'hello', 'andy', (1, 2, 3)}
有一点需要注意的只能添加不可变类型数据,可变类型数据是不允许添加的
set_val = {'hello',123,(1,2,3)}
set_val.add('andy')
set_val.add([1,2,3]) #向集合中添加可变类型数据
print(set_val)
输出结果:
TypeError: unhashable type: 'list'
当我们新增一个可变类型的时候,比如说添加一个列表,这里就提示我们错误信息了,因为列表它是unhashable,就是不可哈西的,所以这里会报一个TypeError错误。
集合修改
本节我们来学习集合的修改,集合修改我们是用update() 方法,update() 方法用于向集合中添加多个元素。如果添加的元素已经存在于集合中,则不会重复添加。
update() 语法:
set.update(iterable)
参数:
- iterable:可迭代对象,可以是列表、元组、字典、集合等。
实例2:像集合中添加多个元素
set_val = {"hello", "world", 123}
set_val.update(["daxiongketang", "andy"])
print(set_val)
输出结果:
{'hello', 'daxiongketang', 'andy', 'world', 123}
集合查询
本节我们来学习在集合中查询在Python中,可以使用in关键字来判断一个元素是否在集合中,这是集合查询的一种方式。
语法:
element in set_name
其中,element表示要查询的元素,set_name表示要查询的集合名称。
返回值:
如果element在set_name中,则返回True;如果element不在set_name中,则返回False。
实例1:使用in判断一个元素是否在集合中
set_val = {'daxiongketang', 'andy', 'Python','大熊'}
print('andy' in set_val)
print('xiaoxiong' in set_val)
输出结果:
True
False
在上面的例子中,我们创建了一个名为my_set的集合,然后使用in关键字来判断'andy'和'xiaoxiong'是否在集合中。由于'andy'在集合中,所以第一个查询返回True,而'xiaoxiong'不在集合中,所以第二个查询返回False。
集合删除
本节我们来学习对集合进行删除操作。本文将介绍Python集合删除中的四个方法:del、pop、remove、discard,总结表格如下:
方法 | 描述 | 示例 |
---|---|---|
del | 删除整个集合 | my_set = {1, 2, 3} del my_set print(my_set) # Output: NameError: name 'my_set' is not defined |
pop | 随机删除集合中的一个元素并返回被删除的元素 | my_set = {1, 2, 3} print(my_set.pop()) # Output: 1 |
remove | 删除集合中指定元素,若元素不存在则抛出异常 | my_set = {1, 2, 3} my_set.remove(2) print(my_set) # Output: {1, 3} |
discard | 删除集合中指定元素,若元素不存在则不执行任何操作 | my_set = {1, 2, 3} ``` |
- del方法
del 方法来删除整个集合。
语法如下:
del set_name[index] #set_name 为要删除元素的集合名称
实例1:过del方法来删除整个集合
set_val = {'daxiongketang', 'andy', 'Python'}
del set_val
print(set_val)
输出结果:
NameError: name 'set_val' is not defined
可以看到,结果这里提示NameError: name 'set_val' is not defined,说明它不存在,也就是这里的集合set_val删除成功了。
- pop()方法
pop()方法可以随机删除集合中的一个元素,并返回该元素的值。其
语法如下:
set_name.pop() #set_name 为要删除元素的集合名称
实例2:使用pop()方法可以随机删除集合中的一个元素
set_val = {'daxiongketang', 'andy', 'Python','大熊'}
pop1 = set_val.pop()
print(set_val)
print(pop1)
pop2 = set_val.pop()
print(set_val)
print(pop2)
输出结果:
{'大熊', 'daxiongketang', 'andy'}
Python
{'daxiongketang', 'andy'}
大熊
可以看到,pop 方法随机删除集合中的一个元素,并返回该元素的值。
- remove()方法
remove 方法可以删除集合中指定的元素。其语法为:
set_name.remove(element)
其中,set_name
为要删除元素的集合名称,element
为要删除的元素。
实例3:使用remove 方法删除集合中指定的元素
set_val = {'daxiongketang', 'andy', 'Python','大熊'}
set_val.remove(('daxiongketang'))
print(set_val)
输出结果:
{'andy', 'Python', '大熊'}
可以看到,remove 方法删除集合中指定的元素。在本例中,被删除的元素是'daxiongketang'。
需要注意的是,如果要删除的元素不存在于集合中,remove 方法会抛出 KeyError 错误。因此,在使用remove 方法时,应该先判断要删除的元素是否存在于集合中。
set_val = {'daxiongketang', 'andy', 'Python','大熊',1,2,3}
if 3 in set_val:
set_val.remove(3)
else:
print("元素不存在")
print(set_val)
输出结果:
{1, 2, 'andy', 'daxiongketang', '大熊', 'Python'}
- discard()方法
discard 方法与 remove 方法类似,可以删除集合中指定的元素。
语法如下:
set_name.discard(element)
其中,set_name
为要删除元素的集合名称,element
为要删除的元素。
与 remove 方法不同的是,如果要删除的元素不存在于集合中,discard 方法不会抛出错误,而是直接忽略该操作。
实例4:使用discard 方法删除集合中指定的元素
set_val = {'daxiongketang', 'andy', 'Python','大熊'}
set_val.discard('xiaoxiong')
print(set_val)
输出结果:
{'andy', 'Python', 'daxiongketang', '大熊'}
可以看到,discard 方法删除集合中指定的元素。在本例中,要删除的元素xiaoxiong不存在于集合中,但该操作并未出现错误。
集合运算
- 交集
本节我们来学习Python 集合运算中的交集。交集是指两个集合中共同存在的元素组成的新集合。用数学符号表示为 A ∩ B。在 Python 中,可以使用“&”符号或者 intersection() 方法、intersection_update来进行交集运算。
(1)intersection() 方法
语法如下:
set.intersection(*others)
该方法接受参数others,表示其他要进行交集操作的集合,返回值为一个新的集合,包含当前集合和所有其他集合中共同的元素。
实例1:使用 intersection() 方法计算交集
set1 = {1,2,3,30,40,50}
set2 = {30,40,50,60,70}
set_val = set1.intersection(set2)
print(set_val)
输出结果:
{40, 50, 30}
其中,intersection() 方法接受一个集合作为参数,返回一个新的集合,包含两个集合共同存在的元素。
(2)intersection_update函数
intersection_update函数是Python中集合运算的一个函数,用于获取两个集合的交集,并将结果更新到原始集合中,即将原始集合修改为交集。
语法如下:
set.intersection_update(set1, set2, ...setN)
其中,set1、set2、...setN为需要进行交集运算的集合,可以传入多个集合。
实例2:使用intersection_update函数求两个集合的交集
set1 = {1,2,3,30,40,50}
set2 = {30,40,50,60,70}
set1.intersection_update(set2)
print(set1)
输出结果:
{40, 50, 30}
运行结果为30,即set1集合中只剩下40、50和30,因为它们是set1和set2的交集。
实例3:使用intersection_update函数求多个集合的交集
set1 = {1,2,3,30,40,50}
set2 = {30,40,50,60,70}
set3 = {40,90}
set1.intersection_update(set2,set3)
print(set1)
输出结果:
{40}
运行结果为40,即set1集合中只剩下40,因为它是set1、set2和set3的交集。
(3)使用“&”符号计算交集
使用“&”符号可以快速计算两个集合的交集。
实例4:使用“&”符号计算两个集合的交集
set1 = {1,2,3,30,40,50}
set2 = {30,40,50,60,70}
set3 = set1 & set2
print(set3)
输出结果为:
{40, 50, 30}
其中,“&”符号表示交集运算,set3 为集合 30,即集合 set1 和 set2 中共同存在的元素。
实例5:使用多个集合计算交集
除了计算两个集合的交集,还可以计算多个集合的交集。例如:
set1 = {1, 2, 3}
set2 = {2, 3, 4}
set3 = {3, 4, 5}
set4 = set1 & set2 & set3
print(set4)
输出结果为:
{3}
其中,set1 & set2 & set3 表示先计算 set1 和 set2 的交集,再计算这个结果和 set3 的交集。最终结果为集合 3,即三 个集合中共同存在的元素。
- 并集
并集是指两个或多个集合的所有元素的集合。如果两个集合 A 和 B 分别有 a 和 b 个元素,那么它们的并集就是包含 a+b 个元素的集合。在 Python 中,可以使用 union() 或者 "|" 运算符来求两个集合的并集。
(1)union() 方法
语法:
set.union(set1, set2, ...)
该方法可以传入一个或多个集合作为参数,也可以不传入参数。如果不传入参数,则返回原集合本身。
返回值:union() 方法合并两个合集
该方法返回一个新的集合,包含所有传入集合和原集合中的元素。
实例6:使用union() 方法合并两个集合
set1 = {1,2,3,30,40,50}
set2 = {30,40,50,60,70}
set3 = set1.union(set2)
print(set3)
输出结果:
{1, 2, 3, 70, 40, 50, 60, 30}
(2)"|" 运算符
语法:
set1 | set2 | ...
该运算符可以使用一个或多个集合作为参数,也可以不使用参数。如果不使用参数,则返回原集合本身。
返回值:
该运算符返回一个新的集合,包含所有传入集合和原集合中的元素。
实例7:使用"|" 运算符合并两个集合
set1 = {1,2,3,30,40,50}
set2 = {30,40,50,60,70}
set3 = set1 | set2
print(set3)
输出结果:
{1, 2, 3, 70, 40, 50, 60, 30}
- 差集
差集是指在一个集合中出现的元素,但在另一个集合中没有出现的元素。Python 中可以使用“-”运算符或者 difference() 方法、difference_update() 方法来实现差集运算。
(1)difference() 方法
语法
set1.difference(set2)
其中,set1和set2都是set对象。该方法将返回set1中不在set2中的元素组成的新集合,不会修改set1和set2本身。
实例7:使用 difference() 方法实现差集
set1 = {1,2,3,30,40,50}
set2 = {30,40,50,60,70}
set3 = set1.difference(set2)
print(set3)
输出结果:
{1, 2, 3}
(2)difference_update()方法
Python中的set对象还提供了difference_update()方法来计算两个集合的差集,并将结果直接更新到set1中。
语法如下:
set1.difference_update(set2)
其中,set1和set2都是set对象。该方法将从set1中移除在set2中出现的元素,返回None。
实例8:difference_update()方法计算集合差集
set1 = {1,2,3,30,40,50}
set2 = {30,40,50,60,70}
set1.difference_update(set2)
print(set1)
输出结果:
{1, 2, 3}
需要注意的是,使用difference_update()方法会直接修改set1,因此需要谨慎使用。
(3)"-" 运算符
语法:
set1 - set2 - ...
该运算符可以使用一个或多个集合作为参数,也可以不使用参数。如果不使用参数,则返回原集合本身。
返回值:
该运算符返回一个新的集合,包含所有传入集合和原集合中的元素。
实例9:使用"-" 运算符计算集合差集
set1 = {1,2,3,30,40,50}
set2 = {30,40,50,60,70}
set3= set1-set2
print(set3)
输出结果:
{1, 2, 3}
集合常用方法
本节我们来介绍一下集合的常用方法汇总,集合也是Python中最常 用的数据类型,所以Python提供了非常多的操作集合的方法。下面按照使用程度的高低给大家做了一个集合常用方法的表格,并且每个方法带超链接,点击方法名字,都有对各个方法的详细介绍。
方法名称 | 方法描述 | 使用程度 |
---|---|---|
add() | 向集合添加元素 | 非常常用 |
clear() | 删除集合中的所有元素 | 常用 |
copy() | 返回集合的浅拷贝 | 常用 |
difference() | 返回两个集合之间的差集 | 常用 |
discard() | 删除集合中指定的元素 | 常用 |
intersection() | 返回两个集合之间的交集 | 常用 |
isdisjoint() | 判断两个集合是否没有交集 | 常用 |
issubset() | 判断一个集合是否是另一个集合的子集 | 常用 |
issuperset() | 判断一个集合是否是另一个集合的超集 | 常用 |
pop() | 随机删除集合中的一个元素 | 常用 |
remove() | 删除集合中指定的元素,如果元素不存在则报错 | 常用 |
union() | 返回两个集合的并集 | 常用 |
update() | 将一个集合中的元素添加到另一个集合中 | 常用 |
difference_update() | 删除一个集合中与另一个集合相同的元素 | 较常用 |
intersection_update() | 删除一个集合中与另一个集合不同的元素 | 较常用 |
symmetric_difference() | 返回两个集合之间的对称差集 | 较常用 |
symmetric_difference_update() | 将一个集合更新为两个集合之间的对称差集 | 较常用 |
len() | 返回集合中元素的数量 | 较常用 |
max() | 返回集合中的最大值 | 较常用 |
min() | 返回集合中的最小值 | 较常用 |